

import java.util.Scanner;
import java.util.InputMismatchException;

public class DriverOp{
	 public static void main(String[] args) {
	 
	 Operaciones<Integer> pila = new Operaciones<Integer>();
	 int indice = -1;
	 int operando, operacion, opcion;
	 do{
			
			menu1();
			opcion = (int)obtenerNumero("Que opcion desea realizar?: ");
			
			switch(opcion){
				case 1:
					indice ++;
					pila.setIndice(indice);
					operando = (int)obtenerNumero("Que operando desea ingresar?: ");
					pila.push(operando);
					
					break;
				case 2:
					if(pila.empty() != true){
						menu2();
						operacion = (int)obtenerNumero("Que operacion desea ingresar?: ");
						int op1= pila.peek();
						indice --;
						pila.setIndice(indice);
						int op2= pila.peek();
						indice ++;
						pila.setIndice(indice);
						int result;
						switch(operacion){					
						
							case 1:
								result = op1 + op2;
								indice ++;
								pila.setIndice(indice);
								pila.push(result);
								break;
							case 2:
								result = op1 - op2;
								indice ++;
								pila.setIndice(indice);
								pila.push(result);
								break;
							case 3:
								result = op2 / op1;
								indice ++;
								pila.setIndice(indice);
								pila.push(result);
								break;
							case 4:
								result = op1 * op2;
								indice ++;
								pila.setIndice(indice);
								pila.push(result);
								break;
							case 5: 
								System.out.println("Ha decidido regresar al menu principal.\n");
								break;
							default:
								System.out.println("\nERROR: Opcion invalida.\n"); 					
						}
					}
					else
						System.out.println("Todavia no ha ingresado ningun valor.");
					break;
				case 3:
					if(pila.empty() != true)
						System.out.println(pila);
					else
						System.out.println("Todavia no ha ingresado ningun valor.");
					break;
				case 4:
					if(pila.empty() != true){
						pila.pop();
						indice --;
						pila.setIndice(indice);
						System.out.println("Su nueva pila es: \n");
						System.out.println(pila);
					}
					else
						System.out.println("Todavia no ha ingresado ningun valor.");
					break;
				case 5: 
					System.out.println("Ha decidido salir del programa. Hasta pronto!\n");	
                    break;
				default:
                    System.out.println("\nERROR: Opcion invalida.\n"); 					
			}
		}while(opcion!=5);
	 }
	 
	 public static int obtenerNumero(String mensaje){
			Scanner ingreso = new Scanner(System.in);
			int num = 0;
        
			System.out.print(mensaje);
			try{
				num = ingreso.nextInt();
			}
			catch(InputMismatchException exception){
          
				System.out.println("\nERROR: Dato invalido. ");
			}
			finally{
				ingreso.nextLine();//Atrapar el ENTER
			}
			return num;
	}
	
		public static void menu1(){
			System.out.println();
			System.out.println("+--       MENU DE OPCIONES       --+");
			System.out.println("| 1. Ingresar operando             |");
			System.out.println("| 2. Emplear operacion aritmetica  |");
			System.out.println("| 3. Ver pila                      |");
			System.out.println("| 4. Quitar operando               |");
			System.out.println("| 5. Salir                         |");
			System.out.println("+----------------------------------+");
			}
			
		
		public static void menu2(){
			System.out.println();
			System.out.println("+--       MENU DE OPCIONES       --+");
			System.out.println("| 1.    + (Suma)                   |");
			System.out.println("| 2.      - (Resta)                |");
			System.out.println("| 3.        / (Division)           |");
			System.out.println("| 4.           * (Multiplicacion)  |");
			System.out.println("| 5. Salir                         |");
			System.out.println("+----------------------------------+");
			}
}
